{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4272362a-7d6f-4412-ba1d-272e81394d4a",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\turke\\AppData\\Local\\Temp\\ipykernel_22888\\909732140.py:9: DeprecationWarning: \n",
      "Pyarrow will become a required dependency of pandas in the next major release of pandas (pandas 3.0),\n",
      "(to allow more performant data types, such as the Arrow string type, and better interoperability with other libraries)\n",
      "but was not found to be installed on your system.\n",
      "If this would cause problems for you,\n",
      "please provide us feedback at https://github.com/pandas-dev/pandas/issues/54466\n",
      "        \n",
      "  import pandas as pd\n",
      "C:\\Users\\turke\\AppData\\Roaming\\Python\\Python310\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
      "  from .autonotebook import tqdm as notebook_tqdm\n",
      "C:\\Users\\turke\\AppData\\Roaming\\Python\\Python310\\site-packages\\transformers\\utils\\hub.py:124: FutureWarning: Using `TRANSFORMERS_CACHE` is deprecated and will be removed in v5 of Transformers. Use `HF_HOME` instead.\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "import requests\n",
    "import os\n",
    "import json\n",
    "import time\n",
    "import jwt\n",
    "import pdfplumber\n",
    "from tqdm import tqdm\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "\n",
    "import jieba\n",
    "from sklearn.feature_extraction.text import TfidfVectorizer\n",
    "from sklearn.preprocessing import normalize\n",
    "from rank_bm25 import BM25Okapi\n",
    "from sentence_transformers import SentenceTransformer\n",
    "\n",
    "\n",
    "openai_key = os.getenv('openai_key')\n",
    "glm_key = os.getenv('glm_key')\n",
    "glm_key = '83e5bc58555d8bac289e27bac50f8afc.Khk1JjCxb8MJN8Mi'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "58e36ddf-28a2-4f64-96d1-b53b75eb368b",
   "metadata": {},
   "outputs": [],
   "source": [
    "def generate_token(apikey: str, exp_seconds: int):\n",
    "    try:\n",
    "        id, secret = apikey.split(\".\")\n",
    "    except Exception as e:\n",
    "        raise Exception(\"invalid apikey\", e)\n",
    "\n",
    "    payload = {\n",
    "        \"api_key\": id,\n",
    "        \"exp\": int(round(time.time() * 1000)) + exp_seconds * 1000,\n",
    "        \"timestamp\": int(round(time.time() * 1000)),\n",
    "    }\n",
    "    return jwt.encode(\n",
    "        payload,\n",
    "        secret,\n",
    "        algorithm=\"HS256\",\n",
    "        headers={\"alg\": \"HS256\", \"sign_type\": \"SIGN\"},\n",
    "    )\n",
    "def get_llm(question, key):\n",
    "    url = \"https://open.bigmodel.cn/api/paas/v4/chat/completions\"\n",
    "\n",
    "    headers = {\n",
    "      'Content-Type': 'application/json',\n",
    "      'Authorization': key\n",
    "    }\n",
    "    data = {\n",
    "  \"model\": \"glm-4\",\n",
    "  \"messages\": [{\n",
    "      \"role\": \"user\",\n",
    "      \"content\": question\n",
    "    }]}\n",
    "    response = requests.post(url, headers=headers, json=data)\n",
    "    return response.json()['choices'][0]['message']['content']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "62494426-61b2-466e-96b1-0c3260285667",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsInNpZ25fdHlwZSI6IlNJR04ifQ.eyJhcGlfa2V5IjoiODNlNWJjNTg1NTVkOGJhYzI4OWUyN2JhYzUwZjhhZmMiLCJleHAiOjE3MDgzMjAxNDk2NDEsInRpbWVzdGFtcCI6MTcwODMxMjk0OTY0MX0.o1e68s5AGMoW0WxvpAr_HVArZtGfpPRF2EViSiNW45I'"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "generate_token(glm_key, 3600*2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ae0cf433-fd88-474a-84eb-bc63ca0d83a1",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true,
    "tags": []
   },
   "source": [
    "# 任务1：初始RAG"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "814e29d1-b1df-410d-8004-b2091fcda27a",
   "metadata": {},
   "source": [
    "与其说LangChain是一个库，它更像是一种思想，它的关键就是RAG的检索。这个idea其实以前的自动问答已经有大概，而LangChain将这种思想结合向量库进行改善，使得大模型在不训练的情况下也有训练的效果。其中它最大提供功能如下：\n",
    "1. 各种向量索引库的集成\n",
    "2. 构建向量库过程中的文本处理\n",
    "3. Agent、prompt等管理模块"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "08891c1a-3357-4603-bbd3-3b2ea48d4c3b",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true,
    "tags": []
   },
   "source": [
    "# 任务2：ChatGPT/GLM API使用"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "595fbad3-a569-4f81-83da-68ac5743b2fb",
   "metadata": {},
   "source": [
    "## chat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "741bdf03-b122-4cf4-8b37-d0c612933e78",
   "metadata": {},
   "outputs": [],
   "source": [
    "# openai\n",
    "url = \"https://openai.api2d.net/v1/chat/completions\"\n",
    "headers = {\n",
    "    'Content-Type': 'application/json',\n",
    "    'Authorization': 'Bearer {}'.format(openai_key)\n",
    "}\n",
    "\n",
    "data = {\n",
    "    \"model\": \"gpt-3.5-turbo\",\n",
    "    \"messages\": [{\"role\": \"user\", \"content\": \"\"\"你好\"\"\"},]\n",
    "}\n",
    "\n",
    "response = requests.post(url, headers=headers, json=data)\n",
    "print(\"Status Code\", response.status_code)\n",
    "print(\"JSON Response \", response.json())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "1309ee8a-9b95-497a-866c-02e0884eecd2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Status Code 200\n",
      "JSON Response  {'choices': [{'finish_reason': 'stop', 'index': 0, 'message': {'content': '你好👋！我是人工智能助手智谱清言（ChatGLM），很高兴见到你，欢迎问我任何问题。', 'role': 'assistant'}}], 'created': 1705929028, 'id': '8313805200375345186', 'model': 'glm-3-turbo', 'request_id': '8313805200375345186', 'usage': {'completion_tokens': 30, 'prompt_tokens': 6, 'total_tokens': 36}}\n"
     ]
    }
   ],
   "source": [
    "# chatglm\n",
    "def generate_token(apikey: str, exp_seconds: int):\n",
    "    try:\n",
    "        id, secret = apikey.split(\".\")\n",
    "    except Exception as e:\n",
    "        raise Exception(\"invalid apikey\", e)\n",
    "\n",
    "    payload = {\n",
    "        \"api_key\": id,\n",
    "        \"exp\": int(round(time.time() * 1000)) + exp_seconds * 1000,\n",
    "        \"timestamp\": int(round(time.time() * 1000)),\n",
    "    }\n",
    "    return jwt.encode(\n",
    "        payload,\n",
    "        secret,\n",
    "        algorithm=\"HS256\",\n",
    "        headers={\"alg\": \"HS256\", \"sign_type\": \"SIGN\"},\n",
    "    )\n",
    "\n",
    "url = \"https://open.bigmodel.cn/api/paas/v4/chat/completions\"\n",
    "headers = {\n",
    "  'Content-Type': 'application/json',\n",
    "  'Authorization': generate_token(glm_key, 1000)\n",
    "}\n",
    "\n",
    "data = {\n",
    "    \"model\": \"glm-3-turbo\",\n",
    "    \"messages\": [{\"role\": \"user\", \"content\": \"\"\"你好\"\"\"}]\n",
    "}\n",
    "\n",
    "response = requests.post(url, headers=headers, json=data)\n",
    "\n",
    "print(\"Status Code\", response.status_code)\n",
    "print(\"JSON Response \", response.json())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "da3c410d-7d7d-482c-846d-0313d5cdcd83",
   "metadata": {},
   "source": [
    "## embedding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3d8fa608-7647-48a9-bbf9-0c2b3c736bd8",
   "metadata": {},
   "outputs": [],
   "source": [
    "# openai\n",
    "url = \"https://openai.api2d.net/v1/embeddings\"\n",
    "\n",
    "headers = {\n",
    "  'Content-Type': 'application/json',\n",
    "  'Authorization': 'Bearer {}'.format(openai_key)\n",
    "}\n",
    "\n",
    "data = {\n",
    "    \"model\": \"text-embedding-ada-002\",\n",
    "    \"input\": \"魔兽世界坐骑去哪买\"\n",
    "}\n",
    "response = requests.post(url, headers=headers, json=data)\n",
    "print(\"Status Code\", response.status_code)\n",
    "print(\"JSON Response \", response.json())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e36a4139-1e41-4138-b8e7-e772d18cafc5",
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Status Code 200\n",
      "JSON Response  {'data': [{'embedding': [-0.013840336352586746, 0.050973281264305115, -0.01606978476047516, -0.023173445835709572, 0.010980673134326935, -0.008409803733229637, -0.04177127033472061, -0.017274904996156693, 0.005274270661175251, 0.06778223812580109, 0.02828308753669262, 0.007300905883312225, 0.012086892500519753, 0.05264405906200409, -0.04144914820790291, -0.0107622304931283, 0.011162856593728065, 0.01041372213512659, 0.04429049789905548, -0.04369046911597252, 0.025944514200091362, 0.03629264608025551, 0.003921781666576862, -0.022125720977783203, -0.0015604185173287988, -0.05565837025642395, -0.03100697509944439, -0.01982254348695278, 0.01422557607293129, -0.03273096680641174, -0.008275809697806835, -0.016490569338202477, 0.0030155268032103777, 0.01925518549978733, -0.0043815188109874725, -0.00492432713508606, -0.01396256498992443, 0.027078552171587944, -0.04922840744256973, -0.018317289650440216, 0.030475277453660965, -0.034271568059921265, 0.015852879732847214, -0.03945104777812958, 0.06451737135648727, -0.0017968181055039167, 0.056638434529304504, 0.05666719377040863, -0.011509551666676998, -0.008750321343541145, 0.03296658396720886, 0.027967577800154686, 0.0037733896169811487, 0.019928157329559326, -0.003031698754057288, -0.019426072016358376, -0.019286412745714188, 0.012573093175888062, -0.0006691195303574204, 0.02834707871079445, 0.013515694066882133, 0.017359398305416107, 0.011345638893544674, 0.0004917352343909442, 0.009153279475867748, -0.002614879049360752, -0.038334283977746964, -0.009173402562737465, -0.03669511526823044, 0.004622852895408869, 0.010900373570621014, 0.03681934252381325, -0.03974171727895737, 0.005959770642220974, -0.0350935198366642, -0.07576765865087509, -0.02436911314725876, 0.01775830239057541, 0.032508183270692825, 0.049941785633563995, 0.07232833653688431, 0.05087366700172424, -0.03165116533637047, -0.047031547874212265, -0.004178035072982311, -0.020015744492411613, -0.0028904348146170378, 0.035773299634456635, -0.035150133073329926, 0.010799368843436241, -0.017959672957658768, 0.054391078650951385, -0.01203025970607996, -0.06645682454109192, -0.03954761475324631, 0.0005603315075859427, 0.016406791284680367, -0.002548344898968935, 0.01157725416123867, -0.022010961547493935, -0.011014314368367195, -0.03288556635379791, 0.0010598250664770603, 0.023106234148144722, -0.001317499321885407, -0.025212788954377174, 0.005283980630338192, -0.027394656091928482, 0.012954461388289928, -0.07736710458993912, 0.021395668387413025, -0.006078910548239946, -0.01538024004548788, 0.023278074339032173, 0.0263171698898077, 0.011902060359716415, -0.006850844249129295, 0.05092607066035271, -0.04142746701836586, -0.01319049671292305, 0.019304949790239334, -0.021656392142176628, -0.004471915308386087, 0.025327110663056374, -0.02398936077952385, -0.005621396005153656, 0.008212468586862087, 0.007525364402681589, 0.005635066889226437, -0.060794148594141006, 0.03550507500767708, -0.014044753275811672, -0.05013267695903778, 0.026442378759384155, -0.04388171434402466, 0.03026328608393669, 0.009057535789906979, 0.006607504095882177, -0.02085733413696289, 0.008089176379144192, 0.01571827195584774, 0.024910392239689827, 0.008874461054801941, -0.0021453252993524075, 0.07129080593585968, 0.0023854209575802088, -0.03341536223888397, 0.03727695718407631, 0.014681174419820309, 0.027164548635482788, -0.017424998804926872, 0.03131147846579552, 9.50775807910531e-13, -0.03129991516470909, 0.004393821582198143, 0.0038819415494799614, -0.056948162615299225, -0.018929336220026016, 0.034847192466259, -0.004163442645221949, -0.01011746097356081, 0.008939802646636963, 0.024632981047034264, 7.641902298806858e-18, -0.0024750230368226767, -0.0023079044185578823, -0.014109078794717789, -0.03665986657142639, 0.06615221500396729, -0.023985158652067184, 0.04705943167209625, 0.009551987051963806, 0.013857991434633732, -0.039679158478975296, 0.0014700538013130426, -0.03422277793288231, 0.041574474424123764, -0.0159025676548481, -0.03136596828699112, 0.01100024115294218, 0.024235539138317108, 0.024020839482545853, 0.009893584996461868, -0.02540316991508007, -0.027352936565876007, 0.01236670557409525, -0.013493530452251434, -0.04717407375574112, -0.053392574191093445, 0.019493602216243744, -0.021438080817461014, -0.018865317106246948, -0.003030171850696206, 0.025424789637327194, 0.01875278167426586, -0.014397080056369305, -0.01764572225511074, 0.001157417893409729, -0.013583612628281116, 0.05378003418445587, -0.028847381472587585, -0.01466347835958004, 0.002599459607154131, 0.04117426648736, 0.03998955711722374, -0.005235771648585796, 0.03212064132094383, -0.027237193658947945, 0.02679678611457348, -0.009365812875330448, 0.006536250934004784, 0.028680400922894478, -0.007769394665956497, -0.06149796396493912, -0.04172876104712486, 0.049952972680330276, 0.044170863926410675, 0.02060081996023655, 0.00930344220250845, 0.003789515933021903, -0.022900206968188286, -0.0005486338632181287, -0.009221233427524567, 0.007610128726810217, -0.06515214592218399, -0.033569417893886566, -0.043491728603839874, 0.026511751115322113, 0.05828017368912697, 0.053964655846357346, -0.019239729270339012, 0.05099344626069069, 0.007248342037200928, 0.05619604140520096, -0.03701747953891754, -0.01641182415187359, 0.018887866288423538, -0.0010599076049402356, -0.00350874662399292, 0.005433203186839819, -0.007090877741575241, 0.030686482787132263, -0.04464227706193924, 0.03166237473487854, 0.05134950950741768, -0.022835612297058105, 0.016232822090387344, -0.016425779089331627, -0.019658222794532776, -0.02039528638124466, -0.02794390730559826, -0.03650254011154175, -0.0612548291683197, 0.01835928112268448, 0.013324051164090633, 0.06372737884521484, 0.007689506746828556, 0.05190238729119301, 0.010629691183567047, -0.027475159615278244, -0.017768435180187225, 0.026483947411179543, 0.025500604882836342, -0.010916256345808506, 0.04931006208062172, -0.03386848792433739, 0.022304413840174675, 0.025764016434550285, -0.013255405239760876, -0.04517526924610138, 0.011028984561562538, 0.007426601834595203, 0.01286130491644144, 0.025128822773694992, 0.031164707615971565, 0.030500546097755432, -0.010354584082961082, -0.033448491245508194, 0.021189140155911446, 0.02135321870446205, -0.018690425902605057, -0.024369163438677788, 0.027370359748601913, 0.03542836010456085, -0.03194206580519676, 0.0003650795842986554, -0.02463042177259922, 0.025195838883519173, -0.01569369249045849, 0.017522260546684265, -0.032798994332551956, -0.0053775729611516, -0.01712428592145443, 0.06196778267621994, -0.027424084022641182, 0.04694744199514389, -0.04604674130678177, -0.022697689011693, 0.009681147523224354, -0.01251052413135767, 0.044813528656959534, -0.0065089138224720955, 0.012795745395123959, 0.03371601924300194, -0.02099360153079033, -0.030577553436160088, 0.0020013770554214716, 0.03779851645231247, 0.013849717564880848, 0.019237767904996872, 0.0019106912659481168, 0.02209651842713356, -0.004635978490114212, 0.0016024088254198432, -0.03964284062385559, -0.008211316540837288, -0.06292866170406342, -0.01615050621330738, 0.03395003080368042, -0.02021116204559803, -0.05231892317533493, 0.023687440901994705, -0.0007332255481742322, -0.043275706470012665, 0.008234359323978424, -0.031195543706417084, -0.017902188003063202, 0.0218934565782547, 0.014377052895724773, -0.0036111201625317335, -0.004414299037307501, -0.051577817648649216, 0.03917592763900757, -0.019542628899216652, -0.032631006091833115, 0.018827222287654877, -0.03971460834145546, -0.029347684234380722, 0.019161267206072807, -0.015826715156435966, 0.046570099890232086, 0.020839117467403412, -0.026985518634319305, 0.046629153192043304, -0.0027720294892787933, 0.03133417293429375, -0.02123831771314144, -0.04467444121837616, 0.02435792051255703, 0.04276047274470329, 0.06714294105768204, -0.03952573612332344, 0.007964059710502625, 0.02425728365778923, 0.01791614666581154, 0.0660494938492775, 0.057423561811447144, 0.003972407430410385, 0.01434845570474863, 0.022631589323282242, 0.023245546966791153, -0.027296120300889015, 0.03140826150774956, 0.008361437357962132, -0.042488038539886475, 0.010568201541900635, -0.037346940487623215, 0.03336302563548088, -0.046387504786252975, -0.03187880665063858, 0.04131225496530533, 0.012293259613215923, 0.01118265651166439, 0.07671091705560684, -0.058087557554244995, -0.022715497761964798, 0.020794764161109924, -0.07673251628875732, -0.002262922702357173, -0.003064698539674282, 0.00874873623251915, -0.03785761445760727, -0.04160512983798981, -0.004704820923507214, 0.025635529309511185, 0.0012369471369311213, 0.025386853143572807, -0.02188953571021557, -0.006494353525340557, 0.05355570837855339, -0.044686008244752884, -0.012007315643131733, 0.016703084111213684, -0.011354213580489159, -0.060814108699560165, 0.030856475234031677, -0.020137157291173935, 0.019490277394652367, 0.018335705623030663, 0.020337872207164764, -0.008714109659194946, -0.02025516703724861, -0.041874829679727554, -0.02930876426398754, 0.011664455756545067, -0.02877493016421795, 0.016664810478687286, -0.027864426374435425, -0.04292679950594902, 0.01764233596622944, -0.006294396705925465, -0.05375804379582405, -0.002676247153431177, -0.029690047726035118, -0.016505694016814232, 0.01728653721511364, 0.018356382846832275, -0.014840400777757168, 0.0031903621274977922, 0.010630026459693909, -0.020340893417596817, -0.022514376789331436, 0.009038779884576797, -0.03743518888950348, 0.05843159928917885, 0.0025972051080316305, -0.0008243306656368077, 0.012918987311422825, -0.011834331788122654, -0.07620573043823242, -0.023417562246322632, 0.034534525126218796, -0.04580890014767647, -0.0011077991221100092, -0.00405442900955677, -0.029311254620552063, -0.01487817708402872, -0.04389100894331932, 0.049376823008060455, 0.027562232688069344, -0.02382843568921089, 0.02126748487353325, 0.029167504981160164, -0.018559284508228302, 0.0021007731556892395, -0.018943432718515396, -0.003215564414858818, -0.05625276267528534, 0.026062753051519394, -0.015747014433145523, 0.03578661009669304, 0.03504742681980133, 0.04957791790366173, 0.011277178302407265, 0.009004984982311726, -0.023038411512970924, -0.011601557955145836, -0.02393832802772522, 0.034126803278923035, -0.04522740840911865, -0.00535098509863019, -0.022627245634794235, 0.04372492432594299, 0.0002523419971112162, -0.016567859798669815, -0.06087474524974823, -0.002081796759739518, 0.024798467755317688, -0.005074472166597843, 0.002257891930639744, 0.02301129512488842, -0.033024903386831284, 0.057207994163036346, -0.029571248218417168, 0.0136718163266778, -0.0063619003631174564, -0.03609084337949753, 0.03804018348455429, 0.006645363289862871, 0.007369581609964371, 0.005669642239809036, -0.008494116365909576, -0.020445706322789192, 0.03534455969929695, -0.053996581584215164, -0.011183864437043667, -0.058757465332746506, -0.00421109376475215, 0.037061236798763275, -0.005172538571059704, 0.04636358097195625, -0.008042124100029469, 0.006049544550478458, 0.012627039104700089, 0.02772071212530136, -0.04464055970311165, -0.009328773245215416, -0.007336387410759926, 0.04739244282245636, 0.029776031151413918, 0.018928900361061096, -0.06558848917484283, -0.001851567649282515, 0.019900623708963394, -0.019058896228671074, -0.002876093378290534, 0.06924401223659515, -0.006381096784025431, -0.019729863852262497, -0.03426118940114975, 0.022420674562454224, -0.024105092510581017, 0.06867748498916626, 0.006945006549358368, 0.020196417346596718, 0.021045641973614693, 0.00028268026653677225, 0.03665751591324806, -0.0468863844871521, -0.023013722151517868, 0.004747933242470026, -0.0014406053815037012, 0.0070180571638047695, 0.012754850089550018, -0.01997450366616249, -0.03692101687192917, 0.0426187589764595, 0.04481435567140579, -0.030336108058691025, -0.014216044917702675, -0.024792350828647614, -0.045836370438337326, 0.04464124143123627, -0.021294735372066498, -0.010435168631374836, 0.00015046064800117165, -0.03027649223804474, 0.018287867307662964, -0.02204550802707672, -0.00742313452064991, 0.061672136187553406, 0.020027119666337967, -0.018956879153847694, 0.01122264377772808, -0.014037990011274815, 0.02629404515028, -0.007882669568061829, -0.013922031037509441, -0.0507272444665432, 0.04266279935836792, -0.015729933977127075, -0.01460945699363947, -0.05892365053296089, 0.022241879254579544, -0.031862422823905945, -0.017258068546652794, 0.0007502220687456429, 0.010146579705178738, -0.019248927012085915, 0.05625446140766144, -0.054284580051898956, -0.045057281851768494, 0.043454766273498535, -0.015399504452943802, -0.031525932252407074, -0.03240527957677841, 0.009238327853381634, 0.030254118144512177, 0.03633944317698479, 0.0027230652049183846, 0.007631582673639059, -0.00042152334935963154, 0.046122919768095016, 0.018859336152672768, -0.015769796445965767, 0.03794235363602638, -0.020785721018910408, -0.020413385704159737, -0.042471855878829956, 0.003988320007920265, 0.012182333506643772, 0.05154647305607796, -0.09591282159090042, -0.013946284539997578, -0.01812005043029785, -0.030557135120034218, 0.03782777115702629, 0.03957619518041611, 0.02531241439282894, 0.0319896936416626, -0.01763894408941269, -0.021165726706385612, 0.040948059409856796, 0.05615448206663132, 0.006887488532811403, 0.05616893246769905, 0.007286179810762405, 0.004830565303564072, 6.348972237901762e-05, 0.0609266497194767, 0.0005299162003211677, -0.014149940572679043, -0.04715478792786598, -0.009106133133172989, 0.013854718767106533, 0.021631717681884766, -0.07151927798986435, -0.0036912395153194666, 0.0007219529361464083, -0.01604827120900154, -0.007915385998785496, -0.009195327758789062, -0.0450466051697731, -0.008408634923398495, -0.008480338379740715, -0.018165336921811104, 0.020840873941779137, 0.01842784695327282, -0.001818906981498003, 0.01659340038895607, -0.06349414587020874, 0.0011159327114000916, 0.06470037251710892, -0.02210419438779354, -0.043513309210538864, -0.011716548353433609, 0.04438050463795662, 0.05714958533644676, -0.04744179919362068, -0.0025732750073075294, 0.003436719998717308, 0.005430266261100769, -0.007882901467382908, 0.005987163167446852, -0.021746767684817314, -0.033076491206884384, 0.03616135194897652, -0.02317538857460022, 0.027410753071308136, 0.010679165832698345, -0.0022690934129059315, -0.01675650104880333, 0.025106700137257576, -0.029681457206606865, 0.021695556119084358, 0.01470709778368473, -0.03457013517618179, -0.04475210979580879, -0.03019486740231514, 0.011157091706991196, 0.07525080442428589, 0.0010057426989078522, -0.017226362600922585, 0.03103717416524887, -0.02135671302676201, 0.014235248789191246, -0.027762824669480324, 0.024700185284018517, -0.00988817773759365, -0.007272745482623577, 0.020390840247273445, -0.005575001705437899, -0.019264016300439835, 0.03434831276535988, -0.074650838971138, -0.06447886675596237, -0.011431466788053513, -0.04939615726470947, 0.011172492057085037, -0.07712392508983612, 0.0005030845641158521, 0.014755835756659508, -0.02340378612279892, -0.025708448141813278, -0.012760247103869915, -0.047022998332977295, -0.014411022886633873, -0.025506360456347466, 0.022578371688723564, 0.007992220111191273, 0.017150839790701866, 0.012615203857421875, -0.046810537576675415, -0.00962601788341999, 0.0003165242378599942, -0.0077263242565095425, -0.04585270583629608, 0.04321363940834999, 0.00452771270647645, -0.04928581789135933, 0.014986129477620125, -0.0007964531541801989, -0.0029018973000347614, -0.02842293307185173, 0.03143071383237839, -0.0009777238592505455, 0.012978878803551197, 0.05991677939891815, 0.013999742455780506, -0.012250643223524094, 0.014959047548472881, -0.012565654702484608, 0.0045063612051308155, -0.014648023061454296, -0.006123183760792017, -0.04699854180216789, -0.034826479852199554, 0.047904904931783676, 0.038414206355810165, -0.0002526442112866789, 0.033410295844078064, -0.005168129689991474, 0.01621105708181858, 0.0611257329583168, 0.0036854734644293785, -0.017901211977005005, -0.024189436808228493, -0.012483768165111542, -0.0690189078450203, 0.0028107608668506145, -0.018379690125584602, 0.020128656178712845, -0.004103942774236202, 0.03924540430307388, -0.010608245618641376, 0.021965621039271355, -0.007825764827430248, 0.04064586013555527, 0.00829179398715496, -0.025932999327778816, 0.043395210057497025, -0.06926847994327545, 0.007469095755368471, -0.022667568176984787, 0.025965282693505287, 0.0013914245646446943, -0.005779601167887449, -0.007419684901833534, 0.002594273304566741, -0.04141971096396446, -0.05085347220301628, -0.018638212233781815, 0.06441307812929153, -0.011697477661073208, -0.01580243930220604, -0.007602511905133724, 0.0262187160551548, -0.0020414043683558702, 0.0030491692014038563, 0.029039008542895317, -0.022611724212765694, 0.003258936107158661, -0.011477284133434296, 0.014792779460549355, 0.014387176372110844, 0.0038511445745825768, 0.020729539915919304, 0.010817092843353748, 0.020376596599817276, 0.05826157331466675, -0.014190522953867912, -0.06213734298944473, -0.002572153229266405, 0.016537513583898544, -0.01953989826142788, -0.018903162330389023, -0.03562745079398155, 0.005927611142396927, -0.040105532854795456, -0.07001616805791855, -0.04728883504867554, 0.03754444792866707, -0.018085753545165062, 0.032127659767866135, 0.019636135548353195, -0.010362938046455383, -0.022123059257864952, 0.0050790696404874325, 0.013359593227505684, -0.07238603383302689, 0.019633177667856216, -0.03617604821920395, -0.034877974539995193, 0.00913973804563284, -0.05924217402935028, -0.019159220159053802, -0.0003683375252876431, 0.028997965157032013, 0.028473377227783203, 0.009556842036545277, 0.006702473387122154, -0.05037027224898338, -0.057548463344573975, -0.013351226225495338, -0.01788988709449768, 0.01978614367544651, -0.04704081267118454, -0.08745197206735611, 0.08612208813428879, 0.0382087342441082, 2.3911501667583934e-09, -0.0665915384888649, 0.014344657771289349, -0.007130180019885302, 0.03487984836101532, 0.019330905750393867, -0.07471887022256851, 0.024007480591535568, 0.006538156419992447, 0.018326427787542343, -0.034261804074048996, 0.0004517052148003131, -0.010348173789680004, 0.056575044989585876, -0.01777832768857479, 0.033933695405721664, 0.044201094657182693, 0.030334917828440666, 0.032965242862701416, 0.04823102056980133, -0.007149853277951479, 0.039890144020318985, 0.022329701110720634, -0.01846790872514248, 0.08204057812690735, 0.04021430015563965, 0.03324151411652565, 0.018567344173789024, -0.0025344539899379015, 0.02313707210123539, -0.004470893647521734, 0.05229289457201958, -0.01547122560441494, -0.007926514372229576, -0.03282185643911362, -0.014267349615693092, -0.04760430380702019, -0.0053824009373784065, 0.005132417660206556, -0.01688743568956852, 0.05107705295085907, 0.026235481724143028, -0.03180844709277153, 0.10623346269130707, -0.025637485086917877, 0.008492554537951946, -0.004122650716453791, -0.0029551261104643345, 0.012488550506532192, 0.005234993528574705, 0.03746345639228821, -0.053235236555337906, -0.002989779692143202, -0.022389966994524002, 0.033577051013708115, 0.01713613234460354, -0.038250572979450226, 0.03154674917459488, -0.06723015010356903, 0.007145960349589586, -0.03276506066322327, -0.0702965036034584, 0.07251841574907303, -0.009776726365089417, -0.0011555575765669346, -0.035601906478405, 0.0826004222035408, 0.06345485895872116, -0.029085515066981316, 0.015618523582816124, -0.0071302964352071285, -0.023413628339767456, 0.0014767643297091126, 0.015516757033765316, 0.006390698719769716, 0.0400167740881443, -0.03323643282055855, -0.042473793029785156, -0.026247715577483177, 0.004487179685384035, 0.02245398610830307, 0.03067692555487156, -0.01704472117125988, 0.008191164582967758, -0.040783051401376724, -0.0011500774417072535, -0.04148305207490921, 0.0065286471508443356, -0.07289881259202957, 0.013037214055657387, 0.01816076599061489, 0.014638754539191723, 0.0337672159075737, -0.03080420382320881, 0.04005139321088791, -0.07639206200838089, -0.03395123407244682, 0.03734985366463661, 0.008692256174981594, 0.005942227318882942, -0.009689651429653168, 0.005448247771710157, 0.0031116309110075235, -2.0620718136330307e-27, 0.028212105855345726, -0.06236269697546959, 0.04996993765234947, 0.016931941732764244, 0.03738127276301384, -0.006869104225188494, 0.015902556478977203, 0.029635680839419365, 0.010746786370873451, 0.0069756279699504375, 0.0466499961912632, -0.0673741027712822, -0.009450288489460945, 0.017871493473649025, 0.02308395877480507, -0.01825137808918953, 0.033791325986385345, 0.013271667063236237, 0.016756853088736534, -0.022977830842137337, -0.08855298161506653, -0.011348037980496883, 0.009987415745854378, 0.04277486354112625, -0.00847655814141035, 0.012157999910414219, 0.006239320617169142, 0.009486806578934193, -0.02471543289721012, -0.07689458876848221, 0.0026139768306165934, -0.015456456691026688, 0.0060494765639305115, 0.035513266921043396, -0.005110384896397591, 0.0018820735858753324, -0.0012274989858269691, 0.005637597758322954, -0.027610912919044495, 0.037385243922472, 0.004805353935807943, 0.012100188061594963, -0.03493720293045044, -0.019846677780151367, -0.007176665123552084, -0.04522005096077919, 0.01156238466501236, 0.04348788410425186, 0.022847235202789307, -0.03370991349220276, 0.038688208907842636, 0.018021784722805023, -0.049247439950704575, -0.0017489931778982282, 0.030196208506822586, 0.018747108057141304, -0.027852382510900497, -0.012423540465533733, -0.013113269582390785, 0.011794804595410824, 0.0054970234632492065, 0.014661487191915512, 0.011326351203024387, 0.015095227397978306, 0.01986338384449482, 0.013337196782231331, 0.04365181550383568, -0.030632279813289642, -0.03376287221908569, 0.019675662741065025, 0.05043915659189224, 0.010421947576105595, 0.03482026234269142, 0.01734684221446514, 0.037498850375413895, -0.018590759485960007, 0.018741559237241745, -0.01946088671684265, 0.00953187607228756, 0.05444883555173874, 0.0074784778989851475, 0.022880036383867264, 0.00768275698646903, -0.023291409015655518, -0.004124866332858801, -0.030415844172239304, 0.026256799697875977, 0.05622875317931175, -0.008891341276466846, -0.008672446012496948, 0.043793365359306335, 0.026584787294268608, -0.017408305779099464, 0.05345722287893295, -0.04076004400849342, -0.05226759985089302, -0.009754737839102745, 0.028841456398367882, -0.020593993365764618, 0.025332430377602577, -2.656698343686867e-24, 0.0047985645942389965, 0.029686393216252327, -0.01301286369562149, 0.011895045638084412, 0.024041535332798958, -0.004486155230551958, -0.020390374585986137, -0.046249158680438995, -0.02151542156934738, -0.08704075962305069, 0.06536786258220673, -0.03121890313923359, 0.04064856469631195, 0.06892218440771103, -0.02387186326086521, -0.009251397103071213, 0.02990889362990856, -0.007868190295994282, 0.02838939242064953], 'index': 0, 'object': 'embedding'}], 'model': 'embedding-2', 'object': 'list', 'usage': {'completion_tokens': 0, 'prompt_tokens': 9, 'total_tokens': 9}}\n"
     ]
    }
   ],
   "source": [
    "# chatglm\n",
    "url = \"https://open.bigmodel.cn/api/paas/v4/embeddings\"\n",
    "\n",
    "headers = {\n",
    "  'Content-Type': 'application/json',\n",
    "  'Authorization': generate_token(glm_key, 1000)\n",
    "}\n",
    "\n",
    "data = {\n",
    "  \"model\": \"embedding-2\",\n",
    "  \"input\": \"测试文本，今天很开心。\"\n",
    "}\n",
    "\n",
    "response = requests.post(url, headers=headers, json=data)\n",
    "\n",
    "print(\"Status Code\", response.status_code)\n",
    "print(\"JSON Response \", response.json())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "233ba965-f2fd-4ea9-9f0b-14faac20af1e",
   "metadata": {},
   "source": [
    "## function all"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c15aa6c0-52cf-461c-8aaa-161530bc5c4b",
   "metadata": {},
   "outputs": [],
   "source": [
    "url = \"https://openai.api2d.net/v1/chat/completions\"\n",
    "\n",
    "headers = {\n",
    "    'Content-Type': 'application/json',\n",
    "    'Authorization': 'Bearer {}'.format(openai_key)\n",
    "}\n",
    "\n",
    "data = {\n",
    "  \"model\": \"gpt-3.5-turbo-0613\", # \"gpt-4-0613\",\n",
    "  \"messages\": [\n",
    "    {\"role\": \"user\", \"content\": \"李华和小王是不是认识？\"},\n",
    "  ],\n",
    "  \"functions\": [\n",
    "    {\n",
    "      \"name\": \"get_connection\",\n",
    "      \"description\": \"判断用户1和用户2 是否为朋友关系\",\n",
    "      \"parameters\": {\n",
    "        \"type\": \"object\",\n",
    "        \"properties\": {\n",
    "          \"user_id1\": {\n",
    "            \"type\": \"string\",\n",
    "            \"description\": \"用户ID 1\"\n",
    "          },\n",
    "          \"user_id2\": {\n",
    "            \"type\": \"string\",\n",
    "            \"description\": \"用户ID 2\"\n",
    "          },\n",
    "        },\n",
    "        \"required\": [\"user_id1\", \"user_id2\"]\n",
    "      }\n",
    "    }\n",
    "  ]\n",
    "}\n",
    "\n",
    "response = requests.post(url, headers=headers, json=data)\n",
    "print(\"Status Code\", response.status_code)\n",
    "print(\"JSON Response \", response.json())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b35a92f3-1933-45ce-a8ed-677656fcc49e",
   "metadata": {
    "tags": []
   },
   "source": [
    "# 任务3：读取汽车问答数据"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "97a0280f-5c0c-4856-b3e9-179eeee6cc56",
   "metadata": {},
   "source": [
    "数据（百度云盘）链接: https://pan.baidu.com/s/19_oqY4bC_lJa_7Mc6lxU7w?pwd=v4bi 提取码: v4bi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "73dae0de-4805-46a1-a598-8ed4d024351d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[{'question': '“前排座椅通风”的相关内容在第几页？', 'answer': '', 'reference': ''}, {'question': '\"关于车辆的儿童安全座椅固定装置，在哪一页可以找到相关内容？\"', 'answer': '', 'reference': ''}, {'question': '“打开前机舱盖”的相关信息在第几页？', 'answer': '', 'reference': ''}, {'question': '“打开前机舱盖”这个操作在哪一页？', 'answer': '', 'reference': ''}, {'question': '“查看行车记录仪视频”这一项内容在第几页？', 'answer': '', 'reference': ''}]\n",
      "354 页的说明书\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'欢迎\\n感谢您选择了具有优良安全性、舒适性、动力性和经济性的Lynk&Co领克汽车。\\n首次使用前请仔细、完整地阅读本手册内容，将有助于您更好地了解和使用车辆。\\n本手册中的所有资料均为出版时的最新资料，但本公司将对产品进行不断的改进和优化，您所购的车辆可能与本手册中的描述有所不同，请以实际\\n接收的车辆为准。\\n如您有任何问题，或需要预约服务，请拨打电话4006-010101联系我们。您也可以开车前往Lynk&Co领克中心。\\n在抵达之前，请您注意驾车安全。\\n©领克汽车销售有限公司'"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "questions = json.load(open('data/questions.json', 'r', encoding='utf-8'))\n",
    "print(questions[:5])\n",
    "pdf = pdfplumber.open(\"data/初赛训练数据集.pdf\")\n",
    "print(len(pdf.pages),'页的说明书') # 页数\n",
    "pdf.pages[0].extract_text() # 读取第一页内容"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "bff04052-20b7-4596-b16f-7a679272a4bd",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|████████████████████████████████████████████████████████████████████████████████| 354/354 [00:07<00:00, 49.62it/s]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>page</th>\n",
       "      <th>content</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>page_1</td>\n",
       "      <td>欢迎\\n感谢您选择了具有优良安全性、舒适性、动力性和经济性的Lynk&amp;Co领克汽车。\\n首次...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>page_2</td>\n",
       "      <td></td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>page_3</td>\n",
       "      <td>目录\\n前言 设置尾门开启角度..................................</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>page_4</td>\n",
       "      <td>目录\\n组合仪表.........................................</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>page_5</td>\n",
       "      <td>目录\\n电子驻车制动（EPB）..................................</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>349</th>\n",
       "      <td>page_350</td>\n",
       "      <td>技术资料\\n动力性能 座椅参数\\n最大设计车 最大爬坡度 项目 前排座椅调节 后排座椅参数\\...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>350</th>\n",
       "      <td>page_351</td>\n",
       "      <td>技术资料\\n注意！ 制动系统参数\\n■ 所有车轮定位值均在车辆出厂载荷状态下（标准设备、所有...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>351</th>\n",
       "      <td>page_352</td>\n",
       "      <td>技术资料\\n缩略语和术语\\n术语 说明\\n缩略语 CMSR 后方碰撞预警系统\\nCVW 车辆...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>352</th>\n",
       "      <td>page_353</td>\n",
       "      <td>技术资料\\n术语 说明 术语 说明\\nHDC 陡坡缓降系统 TLA 交通灯提醒系统\\nHSA...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>353</th>\n",
       "      <td>page_354</td>\n",
       "      <td>技术资料\\n公制术语\\n术语 说明\\n术语 说明\\nN 牛\\n% 百分比 Nm 牛米\\nX:...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>354 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "         page                                            content\n",
       "0      page_1  欢迎\\n感谢您选择了具有优良安全性、舒适性、动力性和经济性的Lynk&Co领克汽车。\\n首次...\n",
       "1      page_2                                                   \n",
       "2      page_3  目录\\n前言 设置尾门开启角度..................................\n",
       "3      page_4  目录\\n组合仪表.........................................\n",
       "4      page_5  目录\\n电子驻车制动（EPB）..................................\n",
       "..        ...                                                ...\n",
       "349  page_350  技术资料\\n动力性能 座椅参数\\n最大设计车 最大爬坡度 项目 前排座椅调节 后排座椅参数\\...\n",
       "350  page_351  技术资料\\n注意！ 制动系统参数\\n■ 所有车轮定位值均在车辆出厂载荷状态下（标准设备、所有...\n",
       "351  page_352  技术资料\\n缩略语和术语\\n术语 说明\\n缩略语 CMSR 后方碰撞预警系统\\nCVW 车辆...\n",
       "352  page_353  技术资料\\n术语 说明 术语 说明\\nHDC 陡坡缓降系统 TLA 交通灯提醒系统\\nHSA...\n",
       "353  page_354  技术资料\\n公制术语\\n术语 说明\\n术语 说明\\nN 牛\\n% 百分比 Nm 牛米\\nX:...\n",
       "\n",
       "[354 rows x 2 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取pdf所有页\n",
    "pdf_content = []\n",
    "for page_idx in tqdm(range(len(pdf.pages))):\n",
    "    pdf_content.append({\n",
    "        'page': 'page_' + str(page_idx + 1),\n",
    "        'content': pdf.pages[page_idx].extract_text()\n",
    "    })\n",
    "pd.DataFrame(pdf_content)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bf35db47-ff5f-4478-9c9a-a6a57f783233",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true,
    "tags": []
   },
   "source": [
    "# 任务4：文本索引与答案检索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "4dc657c1-e8aa-41df-9e55-bc5017a76f63",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Building prefix dict from the default dictionary ...\n",
      "Dumping model to file cache C:\\Users\\turke\\AppData\\Local\\Temp\\jieba.cache\n",
      "Loading model cost 0.664 seconds.\n",
      "Prefix dict has been built successfully.\n"
     ]
    }
   ],
   "source": [
    "# 对提问和PDF内容进行分词\n",
    "question_words = [' '.join(jieba.lcut(x['question'])) for x in questions]\n",
    "pdf_content_words = [' '.join(jieba.lcut(x['content'])) for x in pdf_content]\n",
    "\n",
    "tfidf = TfidfVectorizer()\n",
    "tfidf.fit(question_words + pdf_content_words)\n",
    "\n",
    "# 提取TFIDF\n",
    "question_feat = tfidf.transform(question_words)\n",
    "pdf_content_feat = tfidf.transform(pdf_content_words)\n",
    "\n",
    "# 进行归一化\n",
    "question_feat = normalize(question_feat)\n",
    "pdf_content_feat = normalize(pdf_content_feat)\n",
    "\n",
    "# 检索进行排序\n",
    "for query_idx, feat in enumerate(question_feat):\n",
    "    score = feat @ pdf_content_feat.T\n",
    "    score = score.toarray()[0]\n",
    "    max_score_page_idx = score.argsort()[-1] + 1\n",
    "    questions[query_idx]['reference'] = 'page_' + str(max_score_page_idx)\n",
    "\n",
    "# 生成提交结果\n",
    "# https://competition.coggle.club/\n",
    "with open('result/submit.json', 'w', encoding='utf8') as up:\n",
    "    json.dump(questions, up, ensure_ascii=False, indent=4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "1497d5de-cbdd-4351-98e3-01970eadc78c",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "pdf_content_words = [jieba.lcut(x['content']) for x in pdf_content]\n",
    "bm25 = BM25Okapi(pdf_content_words)\n",
    "\n",
    "for query_idx in range(len(questions)):\n",
    "    doc_scores = bm25.get_scores(jieba.lcut(questions[query_idx][\"question\"]))\n",
    "    max_score_page_idx = doc_scores.argsort()[-1] + 1\n",
    "    questions[query_idx]['reference'] = 'page_' + str(max_score_page_idx)\n",
    "\n",
    "with open('result/submit.json', 'w', encoding='utf8') as up:\n",
    "    json.dump(questions, up, ensure_ascii=False, indent=4)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f528df7e-a459-41c6-b634-e4388946c807",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true,
    "tags": []
   },
   "source": [
    "# 任务5：文本嵌入与向量检索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "6cc60403-f75a-4d83-80b1-aec257fdadf1",
   "metadata": {},
   "outputs": [],
   "source": [
    "model = SentenceTransformer('D:/bert/BAAI/bge-large-zh-v1.5')\n",
    "question_sentences = [x['question'] for x in questions]\n",
    "pdf_content_sentences = [x['content'] for x in pdf_content]\n",
    "\n",
    "question_embeddings = model.encode(question_sentences, normalize_embeddings=True)\n",
    "pdf_embeddings = model.encode(pdf_content_sentences, normalize_embeddings=True)\n",
    "\n",
    "for query_idx, feat in enumerate(question_embeddings):\n",
    "    score = feat @ pdf_embeddings.T\n",
    "    max_score_page_idx = score.argsort()[-1] + 1\n",
    "    questions[query_idx]['reference'] = 'page_' + str(max_score_page_idx)\n",
    "\n",
    "with open('result/submit.json', 'w', encoding='utf8') as up:\n",
    "    json.dump(questions, up, ensure_ascii=False, indent=4)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f7d6fab7-0da8-400c-8c38-a45d2970c006",
   "metadata": {
    "tags": []
   },
   "source": [
    "# 任务6：文本多路召回与重排序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "d952a17b-ea64-4bf6-990c-6331be678e53",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Building prefix dict from the default dictionary ...\n",
      "Loading model from cache C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\jieba.cache\n",
      "Loading model cost 0.545 seconds.\n",
      "Prefix dict has been built successfully.\n"
     ]
    }
   ],
   "source": [
    "import jieba, json, pdfplumber\n",
    "import numpy as np\n",
    "from sklearn.feature_extraction.text import TfidfVectorizer\n",
    "from sklearn.preprocessing import normalize\n",
    "from rank_bm25 import BM25Okapi\n",
    "\n",
    "questions = json.load(open(\"data/questions.json\", encoding='utf-8'))\n",
    "\n",
    "pdf = pdfplumber.open(\"data/初赛训练数据集.pdf\")\n",
    "pdf_content = []\n",
    "for page_idx in range(len(pdf.pages)):\n",
    "    pdf_content.append({\n",
    "        'page': 'page_' + str(page_idx + 1),\n",
    "        'content': pdf.pages[page_idx].extract_text()\n",
    "    })\n",
    "\n",
    "# 加载重排序模型\n",
    "import torch\n",
    "from transformers import AutoModelForSequenceClassification, AutoTokenizer\n",
    "tokenizer = AutoTokenizer.from_pretrained('D:/env/bert_model/BAAI/bge-reranker-base')\n",
    "rerank_model = AutoModelForSequenceClassification.from_pretrained('D:/env/bert_model/BAAI/bge-reranker-base')\n",
    "rerank_model.cuda()\n",
    "\n",
    "pdf_content_words = [jieba.lcut(x['content']) for x in pdf_content]\n",
    "bm25 = BM25Okapi(pdf_content_words)\n",
    "\n",
    "for query_idx in range(len(questions)):\n",
    "    # 首先进行BM25检索\n",
    "    doc_scores = bm25.get_scores(jieba.lcut(questions[query_idx][\"question\"]))\n",
    "    max_score_page_idxs = doc_scores.argsort()[-3:]\n",
    "    \n",
    "    # top3进行重排序\n",
    "    pairs = []\n",
    "    for idx in max_score_page_idxs:\n",
    "        pairs.append([questions[query_idx][\"question\"], pdf_content[idx]['content']])\n",
    "\n",
    "    inputs = tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512)\n",
    "    with torch.no_grad():\n",
    "        inputs = {key: inputs[key].cuda() for key in inputs.keys()}\n",
    "        scores = rerank_model(**inputs, return_dict=True).logits.view(-1, ).float()\n",
    "\n",
    "    max_score_page_idx = max_score_page_idxs[scores.cpu().numpy().argmax()]\n",
    "    questions[query_idx]['reference'] = 'page_' + str(max_score_page_idx + 1)\n",
    "\n",
    "with open('result/submit.json', 'w', encoding='utf8') as up:\n",
    "    json.dump(questions, up, ensure_ascii=False, indent=4)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7524bd3c-d178-4fe0-89cb-63afb5c208a9",
   "metadata": {},
   "source": [
    "# 任务7：文本问答Promopt优化"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5ccb2810-f0b9-4a23-9513-af1514acd218",
   "metadata": {},
   "source": [
    "baseline.ipynb处"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a4107b81-08fe-42de-9ca5-ac07cf174d30",
   "metadata": {},
   "source": [
    "# 任务8：问答意图识别（进阶方向）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1757dd3d-df93-42a1-909f-69ff0c9b2b48",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "602cfeb0-1840-4124-918c-a412a8ceb858",
   "metadata": {},
   "source": [
    "# 任务9：问答关键词提取（进阶方向）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "d46a6c94-ead3-40bc-bf9a-2b94fc1b5764",
   "metadata": {},
   "outputs": [],
   "source": [
    "token = generate_token(glm_key, 3600)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "dd7cd927-a8c6-4c74-87bf-bb141a6e042e",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|████████████████████████████████████████████████████████████████████████████████| 301/301 [05:25<00:00,  1.08s/it]\n"
     ]
    }
   ],
   "source": [
    "\n",
    "\n",
    "keywords_prompt = \"\"\"你是一个专业的文本理解专家，现在请你识别下面内容中的关键词，将关键词使用空格隔开：\n",
    "\n",
    "{}\"\"\"\n",
    "\n",
    "keywords = []\n",
    "\n",
    "questions = json.load(open(\"data/questions.json\", encoding='utf-8'))\n",
    "for query_idx in tqdm(range(len(questions))):\n",
    "    resp = get_llm(keywords_prompt.format(questions[query_idx][\"question\"]), token)\n",
    "    keywords.append(resp)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "178c31db-db5c-4149-a27a-c18d646b3e5b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['前排座椅 通风',\n",
       " '车辆 儿童安全座椅 固定装置 页面 相关内容',\n",
       " '打开 前机舱盖 相关信息 第几页',\n",
       " '打开 前机舱盖 操作 页面',\n",
       " '查看 行车记录仪 视频 第几页',\n",
       " 'Lynk&Co 领克汽车 事件数据记录系统 EDR 记录 信息',\n",
       " '事件数据记录系统 EDR 数据 黑客 利用 恶意攻击',\n",
       " '国家环保法 车辆 报废处理',\n",
       " '车辆 报废 原车主 智能互联服务 使用',\n",
       " '确保 用车前 准备工作 万无一失',\n",
       " '装载 货物 车内 储物空间 利用',\n",
       " '车辆 手套箱 容量 大小 是 多少？',\n",
       " '如何 合理安排 前排 储物空间 提高实用性？',\n",
       " '车辆 手套箱 容量 大小 是 多少？',\n",
       " '如何 使用 前排 座椅 靠背 储物袋？',\n",
       " '后排 中央 扶手 杯托 驾驶员 放置 饮料',\n",
       " '手机 验证码 解锁 手套箱',\n",
       " '手套箱 锁止 忘记 密码怎么办？',\n",
       " '如何 确保 尾门 自动 打开 关闭 过程中 安全 停止？',\n",
       " '尾门 自动打开/关闭 感应 障碍物 机制 是如何？',\n",
       " '如何 确保 尾门 关闭时 安全 可靠？',\n",
       " '尾门 关闭 障碍物 反应',\n",
       " '确保 电动尾门 运动 过程 不会 伤及 人员 障碍物',\n",
       " '尾门 关闭 过程中 触碰 障碍物 自动关闭 位置',\n",
       " '如何 确保 装载 货物 汽车安全性？ \\n\\n关键词：如何 确保 装载 货物 汽车安全性',\n",
       " '装载 货物 汽车 最多 立方米 货物？',\n",
       " '设置 遥控钥匙 靠近 解锁 远离 上锁 功能？',\n",
       " '确保 遥控钥匙 操作 不受干扰',\n",
       " '如何 通过 触摸 车门 外 把手 解锁 闭锁 外部 感应 区域 操作 车辆 闭锁？',\n",
       " '遥控钥匙 蓝牙钥匙 丢失 损坏 车辆 闭锁 解锁 操作',\n",
       " '关键词：确保 车辆 低速行驶 静止 乘客 安全 使用 开门预警系统',\n",
       " '主驾座椅 迎宾功能 自动停用 情况下',\n",
       " '如何 确保 车辆 防盗系统 正常 工作？',\n",
       " '驾驶前 正确调节 驾驶员座椅 安全 舒适',\n",
       " '关键词：不调节 驾驶员座椅 确保 正常操作 制动踏板 加速踏板',\n",
       " '如何 正确 使用 座椅 位置 记忆 功能？',\n",
       " '座椅 自动移动 手动调节 移动怎样',\n",
       " '中央显示屏 方向盘 设置界面 进入',\n",
       " '方向盘 调整 高度 倾斜角度',\n",
       " '方向盘 按键 恢复 驾驶辅助功能',\n",
       " '调整 方向盘 高度 倾斜角度',\n",
       " '驾驶前 调整 方向盘 安全警告 注意',\n",
       " '转向柱 未牢固锁止 驾车 后果',\n",
       " '胎压监测系统 开始闪烁 伴有声音报警 情况下',\n",
       " '车辆 行驶 突然 轮胎漏气 驾驶员 紧急措施 安全',\n",
       " '如何 正确 使用 自动 雨刷？',\n",
       " '自动雨刷 灵敏度 高 调整 小雨 反应 减少',\n",
       " '如何 正确 开启 关闭 后雨刮 倒车 联动 功能？',\n",
       " '如何 判断 后雨刮 倒车 联动功能 是否 已经 开启',\n",
       " '智能远近光控制 开启 指示灯 点亮',\n",
       " '智能远近光控制 低速行人提示音 功能 同时开启',\n",
       " '警告灯 车辆 灯光系统 故障',\n",
       " '智能远近光控制系统 故障警告灯 点亮 驾驶员 操作 安全行驶',\n",
       " '盲点监测系统 故障 提示 车辆',\n",
       " '盲点监测系统 故障 警告灯 常亮 标定 未完成 显示',\n",
       " '车辆 告警灯 常亮 车身稳定控制系统 故障',\n",
       " '车辆 变速器 故障 警告灯 点亮 性能 并未 降低 可能 原因',\n",
       " '安全带 未系 警示系统 警告灯 点亮 情况',\n",
       " '安全带 系统 故障 判断',\n",
       " '设置 调整 机舱盖 车门 尾门 安全带 提醒界面 显示',\n",
       " '关键词：组合仪表 显示屏 红色 高亮提示 未关闭 机舱盖 车门 尾门 未系 安全带 关闭 提示',\n",
       " '如何 通过 组合仪表 设置项 调整 远近光灯？',\n",
       " '行驶 快速 切换 远近光灯',\n",
       " '如何 确保 前大灯 自动 开启/关闭 功能 自动雨刮 功能 正常 使用？ \\n\\n关键词：如何 确保前大灯 自动 开启/关闭 功能 自动雨刮 正常使用',\n",
       " '雨量光线传感器 被遮挡 确保 前大灯 自动开启/关闭功能 自动雨刮功能 正常使用',\n",
       " '如何 确保 大灯 随动转向 功能 适当时候 工作？',\n",
       " '大灯随动转向 功能 自动关闭 情况下',\n",
       " '如何 打开 关闭 左前 阅读灯',\n",
       " '设置 门控灯 功能',\n",
       " '如何 调整 车辆 背光 亮度？',\n",
       " '关键词：调整 车辆 仪表盘 亮度',\n",
       " '车内 氛围灯 调整 亮度 模式',\n",
       " '车内 氛围灯 调整 颜色 亮度',\n",
       " '如何 设置 氛围灯 颜色效果？ \\n\\n关键词：如何 设置 氛围灯 颜色 效果',\n",
       " '车辆 氛围灯 效果 远程控制 实现',\n",
       " '汽车 仪表 灯光系统 部分 组成',\n",
       " '汽车 仪表盘 调整 亮度',\n",
       " '如何 正确 清洁 维护 汽车 安全带 最佳性能 保持',\n",
       " '安全带 锁舌 正确 插入 锁扣 判断',\n",
       " '孕妇 驾驶车辆 降低 受伤风险 措施',\n",
       " '孕期 驾驶 乘坐 车辆 安全气囊 部署 潜在风险 孕妇 胎儿',\n",
       " '安全气囊 不会展开 情况下',\n",
       " '安全气囊 未能展开 车辆乘员 剩余程度 伤害',\n",
       " '远端 安全 侧气囊 展开情况',\n",
       " '远端 安全 侧气囊 受到 侧面碰撞 展开时间',\n",
       " '中央显示屏 设置 车窗 遮阳帘 功能',\n",
       " '行驶 过程中 关闭 驾驶员侧 车窗 步骤 操作',\n",
       " '全景天窗 自动 滑动 打开 情况 下',\n",
       " '全景天窗 遮阳帘 打开状态 关闭 步骤 操作',\n",
       " '确保 儿童 车内 安全',\n",
       " '天窗 自动开启/关闭 防夹功能 无法正常工作 驾驶员 措施 确保 安全',\n",
       " '如何 通过 中央 显示屏 调节 前排 座椅 加热 功能？ \\n\\n关键词：如何 通过 中央 显示屏 调节 前排 座椅 加热 功能',\n",
       " '前排座椅加热 中央显示屏 调节 多个座椅 加热 支持 同时调节',\n",
       " 'Lynk&CoApp 设置 前排座椅 通风 时间',\n",
       " '设置 前排座椅 通风 自动关闭 功能',\n",
       " '前排头枕 安全 驾驶者 额外保护',\n",
       " '驾驶员 侧座椅 通风时间 持续模式 头枕 持续保护',\n",
       " '方向盘 加热功能 强度调节',\n",
       " '方向盘 加热功能 自动启动 情况下',\n",
       " '正确 安装 使用 儿童 安全座椅',\n",
       " '儿童 锁 误触 车内 打开 后门 无法',\n",
       " '儿童安全座椅 顶部系带 绕过 头枕 顶部 侧面',\n",
       " '儿童 体型过大 反向儿童座椅 不适合 使用 辅助软坐垫 年龄 选择 儿童安全座椅',\n",
       " 'ISOFIX 儿童约束系统 不适用 情况下',\n",
       " '车载 12V 电源 电子设备 充电',\n",
       " '声源定位 设置 语音助手 识别 副驾驶 侧 语音指令',\n",
       " '如何 正确 使用 前排 扶手箱 12V 电源 插座 智能设备 充电？',\n",
       " '车辆 行驶过程 无线充电板 故障 处理方法',\n",
       " '车辆 充电服务 设备',\n",
       " '汽车 配备 USB接口 类型 车辆充电',\n",
       " '设备 支持 音频 视频 图片 格式',\n",
       " '汽车 配备 USB接口 前排 乘客 使用 类型',\n",
       " '车辆 无线充电 功能 无法 正常工作 情况下',\n",
       " '车辆 无线充电 系统 是否 支持 同时 多个 设备 充电',\n",
       " '正确 使用 车辆 遮阳板 避免 阳光 直射 驾驶 影响',\n",
       " '遮阳板 夜间驾驶 作用',\n",
       " '蓝牙钥匙 启动 车辆 无法 情况下',\n",
       " '启动 车辆 安全事项 发生事故',\n",
       " '发动机 达到 工作 温度 正确 驾驶 避免 损坏 发动机',\n",
       " '混合动力车辆 损坏 变速器 车辆失控',\n",
       " '混合动力车辆 判断 驱动模式 电机单独驱动 发动机单独驱动 电机 发动机 同时驱动',\n",
       " '设置 方向盘 转向助力 模式 适应 驾驶模式',\n",
       " '关键词：当前 驾驶模式 运动 方向盘 转向助力 方式',\n",
       " '如何 调整 HUD 高度 亮度？',\n",
       " 'HUD 高度 亮度 设置 驾驶 影响 具体',\n",
       " '如何 正确 调整 抬头显示 影像 位置 亮度 确保安全 驾驶？',\n",
       " 'HUD 显示界面 除了 上述 提到 信息 可能 显示 哪些 其他 类型 信息',\n",
       " '设置 能量回收 等级 节省 燃油 效果',\n",
       " '能量回收 等级 设置 自动 系统 路况 智能 切换 回收等级',\n",
       " '车辆 出现 转向 过度 转向 不足 时 车身 稳定 控制系统 是 如何 工作 的？ \\n\\n关键词：车辆 转向 过度 转向不足 车身 稳定控制系统 工作',\n",
       " '关键词：制动系统 故障 仪表 故障指示灯 未点亮 驾驶员 立即停车 联系 Lynk&Co 领克中心',\n",
       " '正确 释放 电子 驻车 制动 EPB 功能',\n",
       " '电子驻车制动 EPB 功能 故障 车辆所有者 正确处理',\n",
       " '情况下 陡坡缓降系统 HDC 车辆 匀速 驶下 陡坡',\n",
       " '电子驻车制动 EPB 启用 警告灯 长亮 诊断 解决问题',\n",
       " '加油 静电 火灾 爆炸 防止 措施',\n",
       " '加油 燃油 溅到 皮肤 清洗 最合适',\n",
       " '领克汽车 出厂 排放标准',\n",
       " '关键词：坡道 使用 制动防抱死系统 正确方法',\n",
       " '防抱死系统 转向控制性能 路况 改善 无法 车辆 特定',\n",
       " '确保 驾驶辅助系统 传感器 正常工作',\n",
       " '车辆 行驶 恶劣天气 确保驾驶辅助系统 可靠性',\n",
       " '如何 确保 使用 最高限速 辅助系统 时 避免意外 调节 车速？ \\n\\n关键词：如何 确保使用 最高限速 辅助系统 避免意外 调节 车速\\n\\n（注：这里将“确保”和“使用”合并为一个关键词，因为它们通常一起出现，具有相关性。）',\n",
       " '恶劣天气条件 安全 使用 最高限速辅助系统',\n",
       " '如何 调整 车辆 最高限速 车速？',\n",
       " '请问 调整 最高限速 车速 60km/h',\n",
       " '资料 ACC 功能 驾驶员 及时 制动 情况下 需要',\n",
       " 'ACC系统 自行车 正确识别 无法情况',\n",
       " '自适应巡航系统（ACC） 目标车速 调整 跟车距离 间隔',\n",
       " '关键词：当前道路 限速牌 巡航自动限速辅助 功能 ACC系统 确定目标车速',\n",
       " '自适应巡航系统 ACC 无法激活 或 自动退出 关键词：\\n\\n自适应巡航系统 ACC 在 什么情况 下 可能 无法激活 自动退出',\n",
       " 'LynkCo-Pilot系统 提醒 驾驶员 接管 车辆 情况下',\n",
       " 'LynkCo-Pilot系统 关键词识别如下：\\n\\n- LynkCo-Pilot系统\\n- 跟车距离\\n- 间隔设置\\n- 最远\\n\\n这些关键词描述了关于LynkCo-Pilot系统的一个具体设置问题。如果要按照要求用空格隔开，则为：\\n\\n\"LynkCo-Pilot系统 跟车距离 间隔设置 最远\"',\n",
       " '如何 确保 使用 高级 智能 驾驶辅助系统 时 保持 安全距离？ \\n\\n关键词：如何 确保 使用 高级 智能 驾驶辅助系统 保持 安全距离',\n",
       " '确保 安全 跟车距离 各种路况 保持',\n",
       " '如何 使用 ALCA 功能 变道',\n",
       " 'LynkCo-Pilot系统 驾驶员 脱手 反应',\n",
       " 'LynkCo-Pilot 系统 提醒 驾驶员 接管 车辆 情况下',\n",
       " 'LynkCo-Pilot 系统 跟车距离 间隔 最远 设置情况',\n",
       " '如何 确保 使用 高级 智能 驾驶辅助系统 时 保持 安全距离？ \\n\\n关键词：如何 确保 使用 高级 智能 驾驶辅助系统 安全距离',\n",
       " '确保 安全 跟车距离 各种路况 保持',\n",
       " 'LynkCo-Pilot 性能下降 无法正常工作 情况下',\n",
       " '驾驶辅助系统 传感器 受限 LynkCo-Pilot 无法正常工作 无法回答 问题 传感器 完全失效 情况 发生什么',\n",
       " '如何 开启 关闭 道路标志 提醒 功能？',\n",
       " '道路标志 提醒功能 识别 显示 禁止超车 解除禁止超车 注意儿童标识 类型 速度限制 车道关闭 信息',\n",
       " '驾驶员 状态监测系统 正常工作 确保',\n",
       " '驾驶员 状态监测系统 无法 正确检测 驾驶员 面部 情况下',\n",
       " 'FCTA系统 无法正常工作 情况下',\n",
       " 'FCTA系统 特定情况 限制 功能',\n",
       " '请问 什么情况 RCTA 无法保证 正常工作？ \\n\\n关键词：请问 什么情况 RCTA 无法保证 正常工作',\n",
       " 'RCTA系统 故障 驾驶员 应对 倒车 安全',\n",
       " '车道辅助系统 绿色状态指示灯哪些情况 显示',\n",
       " '车道辅助系统 停止工作 特定情况',\n",
       " '车道保持辅助系统 LKA 紧急车道保持辅助系统 ELKA 主动请求转向 帮助 车辆 回到 当前 行车道 情况下 会',\n",
       " '关键词：驾驶者 车辆 偏离 车道 主动纠正 纠正力度 LKA ELKA 系统 响应',\n",
       " '车道保持辅助系统 状态 组合仪表 显示 判断',\n",
       " '车道辅助系统 未检测 车道线 操作 解决问题',\n",
       " '紧急车道 保持 辅助系统 (ELKA) 哪些情况 下 可能 不工作',\n",
       " '紧急车道 保持 辅助系统 (ELKA) 特殊情况 无法 正常 工作',\n",
       " '前向碰撞减缓系统 无法正常使用 情况下\\n',\n",
       " 'CMSF系统 局限性 情况 无法正常工作 性能下降',\n",
       " 'CMSF系统 特定情况 无法正常工作',\n",
       " '情况 紧急转向避让辅助系统 EMA 受限制',\n",
       " '紧急情况 EMA系统 反应 时间',\n",
       " '评价 216号 驾驶辅助系统 性能 功能',\n",
       " '驾驶辅助功能 216 具体含义',\n",
       " '泊车辅助系统 无法正确识别 障碍物 情况下 可能原因',\n",
       " '泊车辅助 摄像头 泥土 覆盖 功能 影响 系统',\n",
       " '强烈 阳光 反光 光线较暗 环境 泊车辅助 传感器 影响',\n",
       " '泊车辅助系统 特定情况 无法检测 儿童 物体',\n",
       " '如何 调整 泊车辅助系统 报警音 提示？',\n",
       " '泊车 雷达系统 自动启用 情况下',\n",
       " '如何 正确 使用 360°全景影像 泊车？ \\n\\n关键词：如何、正确、使用、360°全景影像、泊车',\n",
       " '360°全景影像系统 识别 物体 显示 距离误差范围',\n",
       " '泊车时 无法使用 转向联动功能 情况下',\n",
       " '泊车过程 导航界面 驾驶员 接听 操作 手机 导航指令',\n",
       " '全自动泊车 APA 功能 辅助 驾驶员 泊入 泊出 停车位 类型',\n",
       " '全自动泊车 APA 车位类型 支持 多少个车位类型？\\n（提取关键词：全自动泊车 APA 车位类型 支持）',\n",
       " 'Lynk&Co App RPA功能 泊车 驾驶员 注意 事项',\n",
       " 'RPA 功能 失效 情况',\n",
       " 'Lynk&Co App 遥控泊车 功能 车辆 停车位 泊出',\n",
       " 'RPA功能 手机 遥控钥匙 丢失 操作',\n",
       " 'RPA 功能 暂停 避免使用 情况下',\n",
       " 'RPA 功能 暂停 退出 情况下',\n",
       " '请问 泊车 指的是 什么？ \\n\\n关键词：请问、泊车、指的是、什么？',\n",
       " '泊车过程 安全 速度 姿势 确保 车辆',\n",
       " '如何 通过 中央显示屏 调节 驾驶员侧 乘客侧 空调 温度？ \\n\\n关键词：如何 通过 中央显示屏 调节 驾驶员侧 乘客侧 空调 温度',\n",
       " '空调操作 指示灯 不亮起 排查问题',\n",
       " '如何 通过 中央 显示屏 调节 空调 风量？ \\n\\n关键词：如何 通过 中央 显示屏 调节 空调 风量',\n",
       " '请问 如何 通过 中央显示屏 调节 空调 风量？ \\n\\n关键词：请问 如何 通过 中央显示屏 调节 空调 风量',\n",
       " '如何 将 车内 温度 设定 理想水平？ \\n\\n关键词：如何、车内、温度、设定、理想水平',\n",
       " '关键词：自动模式 停用 空调系统 调整 车内温度',\n",
       " '动力电池 电量较低 驻车空调 正常使用',\n",
       " '关键词：动力电池 电量较低 解决 驻车空调 无法正常使用 问题',\n",
       " '如何 调整 前排 右侧 出风口 开关？',\n",
       " '空调 出风口 吹风方向 调整',\n",
       " '关键词：前排 空调 控制界面 切换 车内 空气 内循环 外循环',\n",
       " '长时间 内循环模式 避免车 内空气 不新鲜 车窗起雾 问题',\n",
       " '如何 正确 使用 车内 香氛胶囊 改善 空气质量？',\n",
       " '香氛胶囊 使用时间 更换频率',\n",
       " '确保 空调系统 正确 除去 前挡风玻璃 结冰 雾气',\n",
       " '空调 系统 面板 按钮 前挡风玻璃 无冰渣 积雪 冷凝水',\n",
       " '空调 制冷量 是 多少？ \\n\\n关键词：空调 制冷量',\n",
       " '空调 制冷量 汽车 性能 燃油效率 相匹配',\n",
       " '如何 设置 中央 显示屏 显示模式？ \\n\\n关键词：如何 设置 中央 显示屏 显示模式',\n",
       " '设置 中央 显示屏 自动 显示模式',\n",
       " '车辆功能界面 调整 中央显示屏 亮度',\n",
       " '中央显示屏 自动模式 个人喜好 日出日落 自定时段 显示模式 夜间模式 日间模式 切换',\n",
       " '如何 通过 中央 显示屏 播放 说明 广播 或 音乐？ \\n\\n关键词：如何 通过 中央 显示屏 播放 说明 广播 音乐',\n",
       " '蓝牙 音质 设置 调整 音频体验 更好',\n",
       " '关键词：中央显示屏 设置 车载热点 名称 配置',\n",
       " '车辆 Wi-Fi 网络 信号强度 查看 连接 当前',\n",
       " '汽车 创建 人脸信息 切换 挡位',\n",
       " 'Lynk&Co系统 添加 亲情账户 车辆',\n",
       " 'Lynk&Co ID 同时 在线 多个 账户',\n",
       " '行车记录仪 遇到 紧急情况 保存 时间 视频',\n",
       " '行车记录仪 紧急情况 自动发送 紧急录像 指定 手机号码 服务器',\n",
       " '中央显示屏 查看行车记录仪 拍摄 照片',\n",
       " '行车记录仪 支持格式 内存卡',\n",
       " '正确 清洁 维护 汽车 摄像头 红外 补光灯 系统 正常 工作',\n",
       " '摄像头 红外补光灯 保持清洁 无遮挡 发现 摄像头被遮挡 处理',\n",
       " 'Lynk&Co App 删除 蓝牙钥匙',\n",
       " 'Lynk&CoApp 查看 当前 连接 蓝牙 钥匙',\n",
       " 'Lynk&Co App 用户数量',\n",
       " 'Lynk&Co 汽车 品牌是一种怎么样的？',\n",
       " '电动汽车 充电过程 安全',\n",
       " '雨天 充电 遮雨棚 措施 安全',\n",
       " '如何 正确 使用 220V 交流插座 动力电池 充电？',\n",
       " '充电过程 充电电缆 插头 阳光直射 过热保护 措施',\n",
       " '电动汽车 充电接口 灯光指示 充电状态 判断',\n",
       " '诊断 解决 充电接口 灯光指示 绿-绿-红 依次闪烁 问题',\n",
       " '确保 动力电池 充电过程 超过 设定 目标充电量',\n",
       " '动力电池 设置 目标充电量 车辆 自动 继续充电',\n",
       " '充电过程 因素 充电时间 变长',\n",
       " '充电接口 插座 指示灯 正常工作 判断 车辆',\n",
       " '确保 车辆 预约 充电 成功',\n",
       " '确保 预约充电 功能 车辆 成功连接 车载充电设备 充电桩 充电',\n",
       " '高压系统 额定工作压力是多少？ \\n\\n关键词：高压系统 额定工作 压力',\n",
       " '关键词：高压系统 额定压力',\n",
       " '正确 更换 遥控钥匙 电池 避免 损坏 车辆',\n",
       " '最初 2000km 行驶 操作 油门 发动机 转速 合理范围 确保',\n",
       " '关键词：最初 2000km 行驶 发动机转速 超过 多少 rpm',\n",
       " '保养 维护 过程 安全警告',\n",
       " '发动机 机油 压力警告灯 检查 正常工作',\n",
       " '关键词：建议 使用 Lynk&Co 领克 原厂 纯正 DOT4 制动液',\n",
       " '制动液 皮肤接触 类型 水冲洗',\n",
       " '使用 含防冻剂 洗涤液 情况下',\n",
       " '关键词：情况下 应该 使用 不含 防冻剂 洗涤液',\n",
       " '正确 安装 雨刮片 避免 挡风玻璃 损害',\n",
       " '测量 轮胎 胎压 准确地',\n",
       " '维护 轮胎 车辆 操纵性能 延长 使用寿命',\n",
       " '判断 车辆 胎压 是否 正确',\n",
       " '车辆 漆面保养 减少 腐蚀 风险',\n",
       " '车辆 漆面保养 维护 打蜡 抛光 作用 适用情况',\n",
       " 'Lynk&Co 领克 车辆 保养周期 确定',\n",
       " 'Lynk&Co 领克 智能驾驶 分析系统 识别 记录 驾驶员 驾驶习惯',\n",
       " '汽车保养 维护 延长 使用寿命',\n",
       " '汽车 发动机 内部 积碳 原因',\n",
       " 'OTA升级失败 更新延迟 提示 采取 步骤',\n",
       " 'OTA升级 车辆 断电 处理',\n",
       " '紧急情况 车辆故障 确保 安全 寻求帮助 步骤',\n",
       " '紧急情况 车辆 故障警告 指示灯 图标 消息提示 无法正常工作 处理',\n",
       " '紧急 道路救援服务 车辆 问题 免费 服务',\n",
       " '车辆 保修期外 抛锚 领克救援服务 免费 拖车服务',\n",
       " '资料 提到 情况下 顾客 车辆 驾驶人员 被视为 醉酒状态',\n",
       " '紧急情况 车辆故障 无法解锁 锁止车门 备用机械钥匙 驾驶员 应对',\n",
       " '紧急情况 手动解锁 充电枪',\n",
       " '紧急情况 车辆充电 突发状况 无法拔出 充电口 充电枪 应急解锁拉线 手动解锁 操作 解锁充电枪',\n",
       " '紧急情况 确保安全 车辆牵引 平板拖车',\n",
       " '雨雾天气 高速公路 三角警示牌 车后 多少米以外',\n",
       " '雨雾天气条件 三角警示牌 无法找到 合适地方 设置 如何处理？',\n",
       " '紧急情况 使用 补胎套装 确保轮胎 气压 适当范围',\n",
       " '紧急情况 解锁 车辆 充电盖 打开 充电',\n",
       " '车辆 开始 充电 拆除 端子 防止 火花 产生',\n",
       " '正确 安装 汽车 电子标识 避免 影响 功能',\n",
       " '不遮挡 内后视镜 安装支架 传感器支架 正确安装 汽车电子标识',\n",
       " '参数_MR6453DCH-EV02_车型_油耗_排放_主要因素',\n",
       " '车辆 满载状态 油耗 变化',\n",
       " '汽车技术 缩略语 术语 品牌 车型',\n",
       " '公制术语 \"Nm\" 单位\\n\\n关键词：公制 术语 \"Nm\" 单位',\n",
       " '汽车技术 力矩 1牛米 Nm 牛顿 N 米 m 等于 乘以']"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "keywords"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "02a7a0d3-778e-4abf-b48e-66b44931887b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'\\n你是一名政策文书撰写工作者，请你按照政策文书的协作风格，帮我润色我的政策初稿。\\n 要求：\\n 1. 字数必须超过5000字；\\n 2. 一步步思考，展开每段话的意思，尽可能的丰富拓展每一段话。\\n【政策初稿】\\n好的，以下是我为您制定的政策文案初稿：\\n\\n政策标题：推进珠三角经验的高质量发展五年规划政策制定建议\\n\\n一、引言\\n（1）背景介绍：当前我国经济已由高速增长阶段转向高质量发展阶段，正处于转变发展方式、优化经济结构、转换增长动力的攻关期。 然而，我国的发展不平衡不充分问题仍然突出，高质量发展仍面临诸多困难和挑战。为此，有必要参照珠三角的经验，制定一部关于高质量发展专题的五年政策规划。\\n\\n（2）目的和意义：本政策规划旨在推动我国高质量发展，参照珠三角的成功经验，提出适用于其他地区的高质量发展策略，为地方政府 制定相应政策提供依据。同时，也为推动我国经济转型升级，提高经济增长质量和效益，实现可持续健康发展提供指导。\\n\\n二、现状与挑战\\n（1）现状：近年来，珠三角地区以创新驱动为核心，着力构建现代化产业体系，推动绿色低碳发展，取得了一系列显著成果。在全球竞 争加剧的情况下，珠三角地区依然保持了强劲的经济增长动力，成为全国高质量发展的重要代表。\\n\\n（2）挑战：尽管珠三角地区在高质量发展方面取得了显著成效，但同时也面临着一系列挑战。例如，产业结构单一、创新能力不足、环 境污染等问题仍然较为突出，亟待解决。\\n\\n三、借鉴与参考\\n（1）学习借鉴：珠三角地区的高质量发展经验为其他地区提供了有益的借鉴。特别是其在构建现代化产业体系、推动绿色低碳发展、加 强创新等方面的做法，值得其他地区学习和借鉴。\\n\\n（2）参考策略：根据珠三角经验，提出适用于其他地区的高质量发展策略，包括优化产业结构、推动创新驱动、加强环境治理等方面。\\n\\n四、政策建议\\n（1）明确发展方向：围绕推动高质量发展，提出明确的产业结构优化、创新驱动、绿色发展等方向。\\n\\n（2）完善政策体系：构建系统、科学的政策体系，涵盖投资、产业、人才、环境等多个方面。\\n\\n（3）注重区域协同：强调区域间协调发展的重要性，推动珠三角与周边地区互动合作。\\n\\n（4）强化法治保障：加强法治建设，为高质量发展提供有力的法治保障。\\n\\n五、实施与评估\\n（1）制定时间表：设定政策实施的阶段性目标和时间节点，确保工作有序推进。\\n\\n（2）监测评估：建立有效的监测和评估机制，确保政策目标的顺利实现。\\n\\n（3）持续调整：根据实际情况，及时调整政策内容和方向，保证政策的实效性。\\n\\n六、结论\\n（1）总结全文：概括五个部分的主要观点和建议，对未来的高质量发展工作进行总体把握。\\n\\n（2）对策与建议：呼吁相关部门和地方认真参考本规划，积极推进高质量发展，共同开创美好未来。\\n'"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = \"\"\"\n",
    "你是一名政策文书撰写工作者，请你按照政策文书的协作风格，帮我润色我的政策初稿。\n",
    " 要求：\n",
    " 1. 字数必须超过5000字；\n",
    " 2. 一步步思考，展开每段话的意思，尽可能的丰富拓展每一段话。\n",
    "【政策初稿】\n",
    "好的，以下是我为您制定的政策文案初稿：\n",
    "\n",
    "政策标题：推进珠三角经验的高质量发展五年规划政策制定建议\n",
    "\n",
    "一、引言\n",
    "（1）背景介绍：当前我国经济已由高速增长阶段转向高质量发展阶段，正处于转变发展方式、优化经济结构、转换增长动力的攻关期。 然而，我国的发展不平衡不充分问题仍然突出，高质量发展仍面临诸多困难和挑战。为此，有必要参照珠三角的经验，制定一部关于高质量发展专题的五年政策规划。\n",
    "\n",
    "（2）目的和意义：本政策规划旨在推动我国高质量发展，参照珠三角的成功经验，提出适用于其他地区的高质量发展策略，为地方政府 制定相应政策提供依据。同时，也为推动我国经济转型升级，提高经济增长质量和效益，实现可持续健康发展提供指导。\n",
    "\n",
    "二、现状与挑战\n",
    "（1）现状：近年来，珠三角地区以创新驱动为核心，着力构建现代化产业体系，推动绿色低碳发展，取得了一系列显著成果。在全球竞 争加剧的情况下，珠三角地区依然保持了强劲的经济增长动力，成为全国高质量发展的重要代表。\n",
    "\n",
    "（2）挑战：尽管珠三角地区在高质量发展方面取得了显著成效，但同时也面临着一系列挑战。例如，产业结构单一、创新能力不足、环 境污染等问题仍然较为突出，亟待解决。\n",
    "\n",
    "三、借鉴与参考\n",
    "（1）学习借鉴：珠三角地区的高质量发展经验为其他地区提供了有益的借鉴。特别是其在构建现代化产业体系、推动绿色低碳发展、加 强创新等方面的做法，值得其他地区学习和借鉴。\n",
    "\n",
    "（2）参考策略：根据珠三角经验，提出适用于其他地区的高质量发展策略，包括优化产业结构、推动创新驱动、加强环境治理等方面。\n",
    "\n",
    "四、政策建议\n",
    "（1）明确发展方向：围绕推动高质量发展，提出明确的产业结构优化、创新驱动、绿色发展等方向。\n",
    "\n",
    "（2）完善政策体系：构建系统、科学的政策体系，涵盖投资、产业、人才、环境等多个方面。\n",
    "\n",
    "（3）注重区域协同：强调区域间协调发展的重要性，推动珠三角与周边地区互动合作。\n",
    "\n",
    "（4）强化法治保障：加强法治建设，为高质量发展提供有力的法治保障。\n",
    "\n",
    "五、实施与评估\n",
    "（1）制定时间表：设定政策实施的阶段性目标和时间节点，确保工作有序推进。\n",
    "\n",
    "（2）监测评估：建立有效的监测和评估机制，确保政策目标的顺利实现。\n",
    "\n",
    "（3）持续调整：根据实际情况，及时调整政策内容和方向，保证政策的实效性。\n",
    "\n",
    "六、结论\n",
    "（1）总结全文：概括五个部分的主要观点和建议，对未来的高质量发展工作进行总体把握。\n",
    "\n",
    "（2）对策与建议：呼吁相关部门和地方认真参考本规划，积极推进高质量发展，共同开创美好未来。\n",
    "\"\"\"\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "10509340-6280-48d3-85f3-ae81275888b9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "matches"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b585b876-0e70-4a9b-b461-75f66da40666",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
